package cn.jbooter.coder;

import cn.jbooter.coder.generator.Generator;
import cn.jbooter.coder.helper.CmdHelper;
import cn.jbooter.coder.model.CmdLine;

/**
 * 代码生成器入口
 * 
 * @author hejian
 *
 */
public class Main {
	
	/**
	 * 硬编码组装参数
	 * @param args
	 */
	public static String[] hardCodingArgs() {
		// jdbc数据库连接
		String url = "jdbc:mysql://127.0.0.1:3306/coredb?useUnicode=true&characterEncoding=utf-8";
		// jdbc数据库用户名
		String username = "root";
		// jdbc数据库密码
		String password = "root";
		
		// 代码最终生成路径
		String output = 
				"/Users/hejian/code";
		// 包的前缀部分(eg:com.project)
		String prepackage = 
				"cn.jbooter.simple.demo";
		// 子包部分(用于子模块包定义:eg:system.manage)
		String subpackage = 
				"system";
		// 需要生成的层,多个用,号隔开(service,dao,dubbo)
		String layers = 
				"service,dao,dubbo";
		// 需要将哪些表生成,多个用,号隔开
		String tables = 
				"a_sys_menu,a_sys_user";
		
		String[] args = new String[] {
				"--url", url, 
				"--username", username,
				"--password", password, 
				"--output", output,
				"--prepackage", prepackage,
				"--subpackage", subpackage,
				"--layers", layers,
				"--tables", tables 
		};
		return args;
	}
	
	/**
	 * 运行入口
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		//命令行参数封装类
		CmdLine params = new CmdLine();
		// 如果使用代码手动生成则组装号参数就行,否则使用命令行生成参数,
		// 推荐使用jar包的命令行参数方式
		if(args==null || args.length==0) {
			args=hardCodingArgs();
			params.setCmd(false);
		}else {
			params.setCmd(true);
		}
		//解析参数
		CmdHelper.parseArgument(params, args);
		if(params.isHelp()) {
			//如果是帮助就不执行
			return;
		}
		
		//执行代码生成
		Generator.generate(params);
	}
}
